package main

import (
	"fmt"
)

type person struct {
	name string
	age  int
}

func main() {
	/* 声明变量三种方法
	var s string = "飞雪无情"
	s="飞雪无情"（假设已经声明变量 s）
	s:="飞雪无情"
	变量的初始化也是一种赋值(默认值)
	*/
	// var s string
	// s="张三"
	// fmt.Println(s)

	// 指针变量 如果要对一个变量赋值，这个变量必须有对应的分配好的内存，这样才可以对这块内存操作，完成赋值的目的
	// var sp *string
	// *sp="李四"
	// fmt.Println(*sp)

	// var s string
	// fmt.Printf("%p\n",&s)

	// var sp *string
	// sp=new(string) // 分配内存
	// *sp="行三"
	// fmt.Println(*sp)

	// var sp1 *string
	// sp1 = new(string)
	// fmt.Println(*sp1)

	// 结构体初始化
	// p:=person{name:"占山",age:19}
	// fmt.Println(p)

	// pp:=NewPerson()
	// fmt.Println("name为",pp.name,",age为",pp.age)

	pp := NewPerson("李四", 29)
	fmt.Println("name为", pp.name, ",age为", pp.age)
}

// func NewPerson() *person  {
// 	p:=new(person)
// 	p.name="张三"
// 	p.age=20
// 	return p
// }

func NewPerson(name string, age int) *person {
	p := new(person)
	p.name = name
	p.age = age
	return p
}
